home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0073
/
bsp1.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-01-19
|
4KB
|
104 lines
PROGRAM Beispiel_1; (* Einlesen der Sprites zur Laufzeit *)
(* zur Laufzeit des Programms. *)
uses crt,dos,graph;
VAR gd,gm,x,y,i : integer;
s1,s2,s3,s4 : word; (* Größe der Sprites *)
p1,p2,p3,p4 : pointer; (* Pointer-Variablen für die Sprites *)
CONST pos1 : Array [1..4] of pointtype =
((x:20; y:237),(x:40; y:237),(x:40; y:180),(x:20; y:185));
(* Die Koordinaten des "Tors" *)
PROCEDURE Load;
VAR f : file;
BEGIN
assign (f,'bild1.SPR'); (* Dateiname zuweisen *)
reset (f,1); (* Datei öffnen *)
s1 := filesize (f); (* Dateigröße feststellen *)
getmem (p1,s1); (* entsprechend Speicher reservieren *)
blockread (f,p1^,s1); (* Sprite in die Pointer-Variable einlesen *)
close (f); (* Datei wieder schließen *)
(* Achtung: Hier ist keine Fehlerabfang- *)
(* Routine eingebaut. *)
assign (f,'bild2.SPR'); (* Das gleiche noch dreimal... *)
reset (f,1);
s2 := filesize (f);
getmem (p2,s2);
blockread (f,p2^,s2);
close (f);
assign (f,'bild3.SPR');
reset (f,1);
s3 := filesize (f);
getmem (p3,s3);
blockread (f,p3^,s3);
close (f);
assign (f,'ball.SPR');
reset (f,1);
s4 := filesize (f);
getmem (p4,s4);
blockread (f,p4^,s4);
close (f);
END;
BEGIN
gd := detect;
initgraph (gd,gm,getenv('bgipfad'));
(* statt gentenv... muß hier der Pfad zu dem Verzeichnis stehen, in dem *)
(* sich Ihre BGI-Dateien befinden. Oder Sie lösen das so wie ich; *)
(* ich habe den Pfad zu meinen BGI- und CHR-Dateien in einer Environment- *)
(* Variablen mit Namen BGIPFAD gesetzt (das bedeutet: in die Autoexec.bat *)
(* Datei kommt der Befehl "set bgipfad=C:\PASCAL\BGI", wobei natürlich *)
(* das richtige Verzeichnis angegeben werden muß). Diese Variable kann *)
(* man dann bequem mit Getenv('bgipfad') im Programm abfragen. *)
(* Dies geht allerdings erst ab Turbo Pascal 5.0... *)
clearviewport;
Load; (* Sprites laden *)
line (0,237,getmaxx,237); (* ein bißchen Verzierung... *)
setfillstyle (8,white);
fillpoly (4,pos1);
settextjustify (centertext,centertext);
outtextxy (getmaxx div 2,50,'Beispiel 1 : Sprites zur Laufzeit laden');
x := 600; y := 200;
putimage (260,228,p4^,xorput); (* Ball ausgeben *)
For i := 1 to 21 do (* Der Spieler nimmt Anlauf... *)
BEGIN
putimage (x,y,p1^,xorput); (* erst Bild ausgeben... *)
delay (100-2*i); (* warten... *)
putimage (x,y,p1^,xorput); (* und wieder löschen. *)
dec (x,4);
putimage (x,y,p2^,xorput); (* und jetzt dasselbe nochmal *)
delay (100-2*i);
putimage (x,y,p2^,xorput);
dec (x,4);
putimage (x,y,p1^,xorput);
delay (100-2*i);
putimage (x,y,p1^,xorput);
dec (x,4);
putimage (x,y,p3^,xorput);
delay (100-2*i);
putimage (x,y,p3^,xorput);
dec (x,4);
END;
putimage (x,y,p3^,xorput);
y := 228;
putimage (260,228,p4^,xorput); (* Ball löschen *)
While x > 30 do
BEGIN
putimage (x,y,p4^,xorput); (* und jetzt bewegen *)
delay ((300 - x) div 4);
putimage (x,y,p4^,xorput);
dec(x,4);
END;
outtextxy (getmaxx div 2,280,'Bitte Taste drücken...');
Repeat Until keypressed;
freemem (p1,s1); freemem (p2,s2); (* Speicher wieder freigeben, *)
freemem (p3,s3); freemem (p4,s4); (* nur der Vollständigkeit *)
closegraph; (* halber . . . *)
END.